package com.situ.mall;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularDemo {
    public static void main(String[] args) {
        String str = "We live at 3234058911296670,not at 0589323411296670.32340589112966703234058911296670";
//                    012345678901234567890123456789012345678901234567890123456789012346789012346789012346
//                             (11)                    (35)              (52)          (68)03234058911296670
        List<Integer> positions = findFourConor(str);
        System.out.println(positions);
    }

    static List<Integer> findFourConor(String message) {
        String[] fourCorner = {"3234", "0589", "1129", "6670"};
        List<String> list = Arrays.asList(fourCorner);
//         存放找到位置的集合 positionList:存放位置的表
//        Java中Pattern类的thw compile(String)方法用于根据作为参数传递给方法的正则表达式创建模式。
//        每当您需要将文本与正则表达式模式进行多次匹配时，请使用Pattern.compile()方法创建一个Pattern实例。
//          Pattern构造器是私有的，不能通过new创建Pattern对象，可以通过Pattern调用静态方法compile返回Pattern实例。

        List<Integer> positionList = new ArrayList<>();
        String regex = "\\d{16}";
        Pattern pattern = Pattern.compile(regex);
//      Pattern.compile函数来实现对指定字符串的截取  16位
        Matcher matcher = pattern.matcher(message);
        int fromIndex = 0;
        while (matcher.find()) {
            // find找到一个匹配的后会继续往后找后面匹配的  Matcher.find()方法的功能  对字符串进行匹配,匹配到的字符串可以在任何位置
            String str = matcher.group();
            // matcher.group() 是matcher中关键在正则表达式中 ()定义了一个组，group(0)就是指的整个串，group(1)指的是第一个括号里的东西，
            // group(2)指的第二个括号里的东西。
            System.out.println(str);

            boolean allMatch = true;
            for (int i = 0; i < str.length(); i += 4) {
                String temp = str.substring(i, i + 4);
                if (!list.contains(temp)) {
                    allMatch = false;
                    break;
                }
            }

            if (allMatch) {
                int position = message.indexOf(str, fromIndex);
                fromIndex = position + str.length();
                positionList.add(position);
            }
        }

        return positionList;
    }
}
